A socket is one endpoint of a two-way communication link between two programs or processes. Typically, in network applications, sockets are implemented at the transport layer, and require underlying support of a complete networking protocol stack, including physical layer, data link layer and network layer protocols. For example, Hypertext Transfer Protocol (HTTP) communications use Transmission Control Protocol (TCP) sockets, which operate over a complete Internet Protocol (IP) infrastructure. Operation of the protocol stack on a host computer typically requires that the computer operating system allocate various resources for the purpose, including native threads, synchronization primitives and memory.
Small computing devices, such as mobile and embedded systems, may need sockets for some applications, but may not have the resources necessary to support a complete protocol stack. The communication capability of such devices may be limited (at least for the purposes of the applications in question) to a simple serial link to a host computer.